
// 将三个参数合并为1个，支持自定义基准时间

type OffsetType = 'second' | 'minute' | 'hour' | 'day'
interface OffsetComputeConfiguration {
    minute: number,
    second: number,
    hour: number,
    day: number
}
interface ComputeOffsetDateTimeOptions {
    type: OffsetType
    offsetValue: number
    baseDateTime?: number
}

/**
 * 计算时间偏移量的工具函数，返回距离当前本地时间指定量的日期时间
 */
export default class TimeSpan {
    private static offsets: OffsetComputeConfiguration = {
        second: 1,
        minute: 60,
        hour: 60 * 60,
        day: 60 * 60 * 24
    }
    private static toDateTime(timeStamp: number): Date {
        return new Date(timeStamp)
    }
    /**
     * 
     * @param type 偏移类型
     * @param offsetValue 偏移量 
     * @param baseDateTime 基准时间，默认为当前时间
     * @returns 
     */
    public static offset(options: ComputeOffsetDateTimeOptions): Date {
        // 使用解构的方式赋默认值
        const { baseDateTime = Date.now(), offsetValue, type } = options
        // 也可以采用这种写法 return this.toDateTime(options?.baseDateTime??Date.now() + offsetValue * this.offsets[type] * 1000)
        return this.toDateTime(baseDateTime + offsetValue * this.offsets[type] * 1000)
    }
}

TimeSpan.offset({ type: 'second', offsetValue: 2, baseDateTime: new Date('2020-01-01').getTime() })
TimeSpan.offset({ type: 'minute', offsetValue: 2 })
TimeSpan.offset({ type: 'hour', offsetValue: 2 })
TimeSpan.offset({ type: 'day', offsetValue: 2 })